package pl.egraveyard.assembler;

import pl.egraveyard.command.MyAccountCommand;
import pl.egraveyard.command.RegisterCommand;
import pl.egraveyard.dao.SlMiejscowoscDao;
import pl.egraveyard.domain.Adres;

/**
 * Assembler dla klasy {@link Adres)
 * @author gunos
 *
 */
public final class AdresAssembler {
	private SlMiejscowoscDao slMiejscowoscDao;
	/**
	 * @param slMiejscowoscDao the slMiejscowoscDao to set
	 */
	public void setSlMiejscowoscDao(SlMiejscowoscDao slMiejscowoscDao) {
		this.slMiejscowoscDao = slMiejscowoscDao;
	}
	
	/**
	 * Klasa tlumaczaca obiekt {@link RegisterCommand} na {@link Adres}
	 * @param cmd obiekt zrodlowy
	 * @return obiekt adres
	 */
	public Adres convertCmd2Adres(RegisterCommand cmd){
		Adres adres = new Adres();
		adres.setKodPocztowy(cmd.getZip());
		adres.setMiejscowosc(slMiejscowoscDao.read(cmd.getCity()));
		adres.setNumerLokalu(Integer.valueOf(cmd.getFlatNumber()));
		adres.setUlica(cmd.getStreet());
		return adres;
	}
	
	/**
	 * Klasa tlumaczaca obiekt {@link MyAccountCommand} na {@link Adres}
	 * @param cmd obiekt zrodlowy
	 * @return obiekt adres
	 */
	public Adres convertCmd2Adres(MyAccountCommand cmd){
		Adres adres = new Adres();
		adres.setKodPocztowy(cmd.getZip());
		adres.setMiejscowosc(slMiejscowoscDao.read(cmd.getCity()));
		adres.setNumerLokalu(Integer.valueOf(cmd.getFlatNumber()));
		adres.setUlica(cmd.getStreet());
		adres.setId(cmd.getAdresId());
		return adres;
	}
	
	/**
	 * Konwertuje obiekt Adres na pola w obiekcie command
	 * @param cmd obiekt docelowy
	 * @param adres obiekt zrodlowy
	 */
	public void convertAdres2Cmd(MyAccountCommand cmd, Adres adres){
		cmd.setCity(adres.getMiejscowosc().getKod());
		cmd.setFlatNumber(String.valueOf(adres.getNumerLokalu()));
		cmd.setStreet(adres.getUlica());
		cmd.setZip(adres.getKodPocztowy());
		cmd.setAdresId(adres.getId());
	}
}
